`timescale 1ns / 1ps

module contador(_clk_i,_sync_rst_i,inicia_contador_fila_i,inicia_contador_columna_i,velocidad_fila_i,
	 velocidad_columna_i,termino_contador_fila_o,termino_contador_columna_o);
	 
	 //Inputs
	 input _clk_i;
    input _sync_rst_i;
    input inicia_contador_fila_i;
	 input inicia_contador_columna_i;
	 input [3:0] velocidad_fila_i;
	 input [3:0] velocidad_columna_i;
	 
	 //Outputs
    output reg termino_contador_fila_o;
	 output reg termino_contador_columna_o;
	 
	//Variables Temporales	
	reg [22:0] contador_fila;
	reg [22:0] contador_columna;

	// Contador de movimiento de X (indica cada cuanto se suma un pixel a la posicion de X de la bola)
	// Se le resta la velocidad de la bola en X multiplicado por una constante.
	always @ (posedge _clk_i) 
	begin
		if (inicia_contador_fila_i & ~_sync_rst_i) 
			begin
				if (contador_fila >= (821250 - (velocidad_fila_i*40000))) begin
					contador_fila <= (821250 - (velocidad_fila_i*40000));
					termino_contador_fila_o <= 1;
				end
				else begin
					termino_contador_fila_o <= termino_contador_fila_o + 1;
				end
			end
		else
			begin
				contador_fila  <= 0;
				termino_contador_fila_o <= 0;
			end
	end

	// Contador de movimiento de Y (indica cada cuanto se suma un pixel a la posicion de Y de la bola)
	// Se le resta la velocidad de la bola en Y multiplicado por una constante.
	always @ (posedge _clk_i)
	begin
		if (inicia_contador_columna_i & ~_sync_rst_i) begin
			if (contador_columna >= (821250 - (velocidad_columna_i*40000))) begin
				contador_columna <= (821250 - (velocidad_columna_i*40000));
				termino_contador_columna_o <= 1;
			end
			else begin
				contador_columna <= contador_columna + 1;
			end
		end
		else begin
			contador_columna <= 0;
			termino_contador_columna_o <= 0;
		end
	end
	
endmodule
